package org.shuma.user.mng.utils;


import org.mindrot.jbcrypt.BCrypt;

/**
 * @author zhao haitao
 * @date 2024/06/17 1:11 PM
 */
public class BcryptUtil {
    /**
     * 使用BCrypt对明文进行哈希加密。
     *
     * @param plainText 明文
     * @return 加密后的哈希值，其中已包含salt
     */
    public static String encode(String plainText) {
        // BCrypt.gensalt()会自动为每个密码生成一个随机的salt并嵌入到hash中
        return BCrypt.hashpw(plainText, BCrypt.gensalt());
    }

    /**
     * 验证密码是否正确。
     *
     * @param plainText  用户输入的明文
     * @param storedHash 数据库中存储的加密后的哈希值
     * @return 如果密码匹配返回true，否则返回false
     */
    public static boolean matches(String plainText, String storedHash) {
        // BCrypt.checkpw内部会解析出hash中的salt并与提供的密码重新计算hash后比较
        return BCrypt.checkpw(plainText, storedHash);
    }
}
